[Jest] テスト実行時に「ts-jest[config] (WARN) There is a mismatch between your NodeJs version v12.14.0 and your TypeScript target ES2020.」という警告が出るので対処する
こんにちは、CX事業本部 IoT事業部の若槻です。
Jestは、JavaScriptのテスティングフレームワークです。
今回は、Jestでのテスト実行時にts-jest[config] (WARN) There is a mismatch between your NodeJs version v12.14.0 and your TypeScript target ES2020.
という警告が出るので対処した話です。
テストの実行で警告が出る
TypeScriptのプロジェクトでJestのテストを実行すると、テスト実行自体は行われますが、ts-jest[config] (WARN) 〜
という警告が出力されました。
$ npx jest ./test/writeDataToFile.test.ts ts-jest[config] (WARN) There is a mismatch between your NodeJs version v12.14.0 and your TypeScript target ES2020. This might lead to some unexpected errors when running tests with `ts-jest`. To fix this, you can check https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping PASS test/writeDataToFile.test.ts ✓ 画像データをローカルファイルに書き込む (4 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 3.753 s Ran all test suites matching /.\/test\/writeDataToFile.test.ts/i.
警告文を抜き出したのが下記です。
ts-jest[config] (WARN) There is a mismatch between your NodeJs version v12.14.0 and your TypeScript target ES2020. This might lead to some unexpected errors when running tests with
ts-jest
. To fix this, you can check https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping
字義通りに読むと、下記2点の環境の状態がミスマッチであるため、ts-jestでのテスト実行時に予期せぬエラーが起きる可能性があるとのことです。
- Node.jsのバージョンが
12.14.0
- TypeScriptターゲットが
ES2020
Node Target Mapping
警告にあったURLリンクhttps://github.com/microsoft/TypeScript/wiki/Node-Target-Mappingによると、TSConfig(tscongig.json
)でのコンパイラオプション設定はNode.jsのバージョンごとに下記のようにマッピングさせるのが推奨とのことです。このNode Target Mappingに従うことにより不必要なコンパイルを抑えることができるようになります。
- Node14
{ "compilerOptions": { "lib": ["ES2020"], "module": "commonjs", "target": "ES2020" } }
- Node12
{ "compilerOptions": { "lib": ["ES2019"], "module": "commonjs", "target": "ES2019" } }
- Node10
{ "compilerOptions": { "lib": ["es2018"], "module": "commonjs", "target": "es2018" } }
原因、対処
では今回のプロジェクトの環境はというと、Nodeバージョンは12であるのに対して、コンパイラ設定はNode14向けとなっており、Node Target Mappingに反しています。これが今回のテスト実行時の警告の原因のようです。
$ node --version v12.14.0
{ "compilerOptions": { "lib": ["ES2020"], "module": "commonjs", "target": "ES2020" } }
対処その1
Nodeバージョンを12.14.0
のまま変更せず、コンパイラ設定をNode12向けに変更してみます。
{ "compilerOptions": { "lib": ["ES2019"], "module": "commonjs", "target": "ES2019" } }
するとJestのテストを実行しても警告は出なくなりました。
対処その2
今度は逆に、コンパイラ設定をNode14向けのまま変更せず、Nodeバージョンを14に変更してみます。
Nodeのバージョン管理はnodenvを利用しています。現在インストールされているNodeバージョンは12.14.0
のみです。
$ nodenv versions system * 12.14.0 (set by /Users/wakatsuki.ryuta/.node-version)
nodenvでNode14.5.0をインストールします。
$ nodenv install 14.5.0 $ nodenv versions system * 12.14.0 (set by /Users/wakatsuki.ryuta/.node-version) 14.5.0
globalで14.5.0にしてみます。
$ nodenv global 14.5.0
しかし12.14.0のまま変わりませんでした。
$ nodenv versions system * 12.14.0 (set by /Users/wakatsuki.ryuta/.node-version) 14.5.0
調べてみると下記の記事が参考になりました。rootの.node-version
を削除する必要があるようです。
rootの.node-version
を削除します。
$ rm /Users/wakatsuki.ryuta/.node-version
Nodeバージョンが切り替わりました。
$ nodenv version 14.5.0 (set by /Users/wakatsuki.ryuta/.nodenv/version) $ node --version v14.5.0
するとJestのテストを実行しても警告は出なくなりました。
おわりに
Jestでのテスト実行時にts-jest[config] (WARN) There is a mismatch between your NodeJs version v12.14.0 and your TypeScript target ES2020.
という警告が出るので対処した話でした。
「ビルド、デプロイはCI/CD環境で最終的に行われるので開発環境のNodeバージョンなどはあまり気を使わなくていいや」というルーズさを見透かされた気がしました。
参考
以上